# 1.请写出下列代码的执行结果：
# 例一：
'''
def func1():
	print('in func1')

def func2():
	print('in func2')

ret = func1

ret()                   #'in func1'

ret1 = func2

ret1()                  #'in func2'

ret2 = ret

ret3 = ret2

ret2()                  #'in func1'

ret3()                  #'in func1'
in func1
in func2
in func1
in func1
'''

# 例二：
'''
def func1():
    print('in func1')

def func2():
    print('in func2')

def func3(x, y):
    x()

    print('in func3')

    y()

print(111)
func3(func2, func1)
print(222)
# 111
# in func2
# in func3
# in func1
# 222
'''

# 例三（选做题）：
'''
def func1():
    print('in func1')

def func2(x):
    print('in func2')
    return x

def func3(y):
    print('in func3')
    return y

ret = func2(func1)
ret()                   #in func2
                        #in func1

ret2 = func3(func2)     #in func3
ret3 = ret2(func1)      #in func2
ret3()                  #in func1
'''

# 看代码写结果：
# 例四:
'''
def func(arg):
    return arg.replace('苍老师', '***')

def run():
    msg = "Alex的女朋友苍老师和大家都是好朋友"
    result = func(msg)
    print(result)

run()           #"Alex的女朋友***和大家都是好朋友"
data = run()    #"Alex的女朋友***和大家都是好朋友"
print(data)     #None
'''

# 例五:
'''
data_list = []

def func(arg):
    return data_list.insert(0, arg)

data = func('绕不死你')
print(data)             #None
print(data_list)        #data_list = ['绕不死你']
'''

# 看代码写结果：
# 例六:
'''
def func():
    print('你好呀')
    return '好你妹呀'

func_list = [func, func, func]

for item in func_list:
    val = item()
    print(val)
# '你好呀'
# '好你妹呀'
# '你好呀'
# '好你妹呀'
# '你好呀'
# '好你妹呀'
'''

# 看代码写结果：
# 例七:
'''
def func():
    return '大烧饼'

def bar():
    return '吃煎饼'

def base(a1, a2):
    return a1() + a2()

result = base(func, bar)
print(result)

# 大烧饼吃煎饼
'''

# 看代码写结果：
# 例九:
'''
for item in range(10):
    print(item)

print(item)
# 1,2,3,4,5,6,7,8,9
# 9
'''

# 看代码写结果：
# 例十:
'''
def func():
    for item in range(10):
        pass
    print(item)
func()
# 9
'''

# 看代码写结果：
# 例十一:
'''
item = '老男孩'
def func():
    item = 'alex'
    def inner():
        print(item)
        for inner in range(10):
            pass
    inner()
func()

#alex
'''

# 看代码写结果：
# 例十二:
'''
l1 = []
def func(args):
    l1.append(args)
    return l1
print(func(1))          #[1]
print(func(2))          #[1,2]
print(func(3))          #[1,2,3]
'''

# 看代码写结果：
# 例十三:
'''
name = '宝元'
def func():
    global name
    name = '男神'
print(name)             #宝元
func()                  
print(name)             #男神
'''

# 看代码写结果：
# 例十四:
'''
name = '宝元'
def func():
    print(name)
func()

#宝元
'''

# 看代码写结果：
# 例十五:
'''
name = '宝元'
def func():
    print(name)
    name = 'alex'
func()

#报错
'''

# 看代码写结果：
# 例十六:
'''
def func():
    count = 1
    def inner():
        nonlocal count
        count += 1
        print(count)    #2
    print(count)        #1
    inner()
    print(count)        #2
func()
# 1
# 2
# 2
'''

# 看代码写结果：
# 例十七:
'''
def extendList(val,list = []):
    list.append(val)
    return list

list1 = extendList(10)          #[10,'a']
list2 = extendList(123,[])      #[123]
list3 = extendList('a')         #[10,'a']

print('list1=%s'%list1)         
print('list2=%s'%list2)
print('list3=%s'%list3)

# list1=[10, 'a']
# list2=[123]
# list3=[10, 'a']
'''

# 看代码写结果：
# 例十八:
'''
def extendList(val,list=[]):
    list.append(val)
    return list
print('list1=%s'% extendList(10))           #[10]
print('list2=%s'% extendList(123,[]))       #[123]
print('list3=%s'% extendList('a'))          #[10,'a']

# list1 = [10]
# list2 = [123]
# list3 = [10, 'a']
'''

# 2.用你的理解解释一下什么是可迭代对象，什么是迭代器。
'''
可迭代对象：可以直接作用于for循环的对象统称为可迭代对象
迭代器：可以被next()函数调用并不断返回下一个值的对象称为迭代器
'''

# 3.使用while循环实现for循环的本质(面试题)
'''
while True:
    try:
        print('可迭代对象'.__next__())
    except StopIteration:
        break
'''